package com.ftg.learn.chapter08.pattern.myreflech;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 狮子
 *
 * @author lijiaxin
 * @version 1.0
 * @date 2023/8/7 15:12
 */

public class Lion {

    private String name;

    private String color;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    //1 使用反射实例化一个Lion子, 辛巴  红色

    public static void main(String[] args) {
//        Lion l=new Lion();
//        Lion f=new LionFactory();
//        Class<? extends Lion> lion = l.getClass();
//        Class<? extends Lion> lionFactory = f.getClass();
        Class lion=Lion.class;
        Object obj=null;
        try {
            obj=lion.newInstance();
            Field[] ms=lion.getDeclaredFields();
//            for (Field m : ms) {
//                if (m.getName().equals("name")) {
//                    m.set(obj, "辛巴");
//                }
//                if (m.getName().equals("color")) {
//                    m.set(obj, "红色");
//                }
//                System.out.println(m.get(obj));
//            }

//            Method[] method=lionFactory.getMethods();
//            for (Method ms1 : method) {
//                System.out.println("方法名称 ==> " + ms1.getName());
//                Parameter[] parameters = ms1.getParameters();
//                for (Parameter p : parameters) {
//                    System.out.println("参数名称：" + p.getName());
//                    System.out.println("参数类型" + p.getType());
//                }
//            }
            Method method1=lion.getMethod("setName", String.class);
            method1.invoke(obj, "nn");
            System.out.println(lion.getName());

        } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
            e.printStackTrace();
        }
    }

    //1.1 LionFactory 里面有一个方法 public static Lion getLion(String name,String color){
    // }
}
